declare
                            cursor mdb_uno is select b.*  from 
                                                (select cod_individuo cod_indi_1 ,sum(1) n
            
                                                        from asm_anagrafe_terni_mdb 
                                                    group by cod_individuo) a, asm_anagrafe_terni_mdb b
                                                                where n = 1
                                                        and a.cod_indi_1 = b.cod_individuo
                                                                        ;
cursor mdb_due is select b.*,a.data_immig_1,a.data_emig_1,a.data_de_1  from 
          (select cod_individuo cod_indi_1 ,sum(1) n,max(data_immig)data_immig_1,max(data_emig)  data_emig_1,max(to_date(data_decesso,'dd/mm/yyyy')) data_de_1 
            
          from asm_anagrafe_terni_mdb 
        group by cod_individuo) a, asm_anagrafe_terni_mdb b
                 where n > 1
              and a.cod_indi_1 = b.cod_individuo
                                ;


   
 

DATA_AGG DATE;
tipo_evento  varchar2(1);
data_evento date;

  v_errore                 NUMBER(1);
  v_errore1                 NUMBER(1);
  v_str_err                VARCHAR2(2000);
  

BEGIN
DATA_AGG :=trunc(sysdate);
execute immediate('TRUNCATE TABLE asm_anagrafe_terni');
execute immediate('TRUNCATE TABLE asm_anagrafe_terni_appo');

 for r_mdb_uno IN mdb_uno LOOP
 
    tipo_evento:=null;
     data_evento := null;
     
     
                     if r_mdb_uno.data_decesso is not null then tipo_evento:='D' ; data_evento :=  to_date(r_mdb_uno.data_decesso,'dd/mm/yyyy')  ; else  
                      if  r_mdb_uno.data_emig is not null then tipo_evento:='E';data_evento :=r_mdb_uno.data_emig  ;  else 
                          if r_mdb_uno.data_immig is not null then tipo_evento :='I'; data_evento :=r_mdb_uno.data_immig ;
                         end if;
                     end if;
                 end if;    
     
     
      insert into ASM_anagrafe_terni_appo values
                               ( DATA_AGG,
                                
         UPPER( trim(r_mdb_uno.COGNOME)),   UPPER( trim(r_mdb_uno.NOME)),
          UPPER(trim(r_mdb_uno.CODICE_PAR)),UPPER(trim(r_mdb_uno.CODICEFISCALE)),'UNO' ,to_date(r_mdb_uno.DATA_NASC,'dd/mm/yyyy'),trim(r_mdb_uno.CODICE_VIA),
            trim(r_mdb_uno.NUMERO_CIVICO),
                trim(r_mdb_uno.ESPONENTE),null ,
        tipo_evento,   
                 data_evento, 
                  ' ' ,' ' ,r_mdb_uno.COD_FAMIGLIA,'',r_mdb_uno.COD_INDIVIDUO );   
                  
                  commit;      
                                  
   end loop; 
  
          ---**********************************************************************************************
          --*********************************    individui con record doppi doppi   ************************************
          --**********************************************************************************************
          
    for r_mdb_uno IN mdb_due LOOP
    
     tipo_evento:=null;
     data_evento := null;
                     if r_mdb_uno.data_de_1 is not null then tipo_evento:='D' ; data_evento :=  to_date(r_mdb_uno.data_de_1,'dd/mm/yyyy')  ; else  
                      if  r_mdb_uno.data_emig_1 is not null and r_mdb_uno.data_immig_1 is  null then tipo_evento:='E';data_evento :=r_mdb_uno.data_emig_1 ;  else 
                          if r_mdb_uno.data_immig_1 is not null and r_mdb_uno.data_emig_1 is  null then tipo_evento :='I'; data_evento :=r_mdb_uno.data_immig_1 ; else 
                           if r_mdb_uno.data_immig_1 is not null and r_mdb_uno.data_emig_1 is  not null   and r_mdb_uno.data_immig_1  > r_mdb_uno.data_emig_1 then tipo_evento :='I'; data_evento :=r_mdb_uno.data_immig_1 ; else
                              if r_mdb_uno.data_immig_1 is not null and r_mdb_uno.data_emig_1 is  not null   and r_mdb_uno.data_immig_1  <= r_mdb_uno.data_emig_1 then tipo_evento :='E'; data_evento :=r_mdb_uno.data_emig_1 ; 
                              end if;
                              end if;
                         end if;
                     end if;
                 end if;    
     
     
      insert into ASM_anagrafe_terni_appo values
                               ( DATA_AGG,
                                
        UPPER( trim(r_mdb_uno.COGNOME)),   UPPER( trim(r_mdb_uno.NOME)),
          UPPER(trim(r_mdb_uno.CODICE_PAR)),UPPER(trim(r_mdb_uno.CODICEFISCALE)),'DUE' ,to_date(r_mdb_uno.DATA_NASC,'dd/mm/yyyy'),trim(r_mdb_uno.CODICE_VIA),
            trim(r_mdb_uno.NUMERO_CIVICO),
                trim(r_mdb_uno.ESPONENTE),null ,
          tipo_evento,   
                 data_evento, 
                  ' ' ,' ' ,r_mdb_uno.COD_FAMIGLIA,'',r_mdb_uno.COD_INDIVIDUO );   
                  
                  commit;      
                                  
   end loop; 
    

   

BEGIN
insert into asm_anagrafe_terni select  distinct x.* from asm_anagrafe_terni_appo x 
where (x.codice_tipo_evento <> 'E' and x.codice_tipo_evento <> 'D') or x.codice_tipo_evento is null ;
commit;
end;
    
    begin
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 2926
WHERE asm_anagrafe_terni.CODICE_VIA = 2925;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 971
WHERE asm_anagrafe_terni.CODICE_VIA = 970;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 1890
WHERE asm_anagrafe_terni.CODICE_VIA = 1891;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 2425
WHERE asm_anagrafe_terni.CODICE_VIA = 2426;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA =2492
WHERE asm_anagrafe_terni.CODICE_VIA = 2493;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 2572
WHERE asm_anagrafe_terni.CODICE_VIA = 2573;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 3042
WHERE asm_anagrafe_terni.CODICE_VIA = 3043;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 3315
WHERE asm_anagrafe_terni.CODICE_VIA = 3316;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 4275
WHERE asm_anagrafe_terni.CODICE_VIA = 4276;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 4905
WHERE asm_anagrafe_terni.CODICE_VIA = 4906;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 5275
WHERE asm_anagrafe_terni.CODICE_VIA = 5276;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 5395
WHERE asm_anagrafe_terni.CODICE_VIA = 5396;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 5715
WHERE asm_anagrafe_terni.CODICE_VIA = 5716;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 5991
WHERE asm_anagrafe_terni.CODICE_VIA = 5992;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 6080
WHERE asm_anagrafe_terni.CODICE_VIA = 6081;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 6732
WHERE asm_anagrafe_terni.CODICE_VIA = 6733;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 6825
WHERE asm_anagrafe_terni.CODICE_VIA = 6826;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 7275
WHERE asm_anagrafe_terni.CODICE_VIA = 7276;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 7585
WHERE asm_anagrafe_terni.CODICE_VIA =7586;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 1928
WHERE asm_anagrafe_terni.CODICE_VIA =1929;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 5991
WHERE asm_anagrafe_terni.CODICE_VIA =5992;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 6365
WHERE asm_anagrafe_terni.CODICE_VIA =6366;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 5091
WHERE asm_anagrafe_terni.CODICE_VIA =5092;
UPDATE asm_anagrafe_terni
SET asm_anagrafe_terni.CODICE_VIA = 1716
WHERE asm_anagrafe_terni.CODICE_VIA =1715;
commit;
end;
    
    
     if v_errore1 = 1
     then 
        insert into ASM_LETTURE_ERicsson_ERr_v2 values( 'LETTURA PER CURVE POD '||v_str_err);
       COMMIT;
     end if;  
end;



                                